package com.library.book.service;

import com.library.book.dao.BookDao;
import com.library.book.dao.BookDaoImpl;
import com.library.book.model.Book;
import com.library.util.PageModel;

import java.util.Date;
import java.util.List;
import java.util.Map;

public class BookServiceImpl implements BookService {
    private BookDao bookDao = new BookDaoImpl();

    @Override
    public boolean addBook(Book book) {
        // 设置初始状态为"在库"
        if (book.getStatus() == null || book.getStatus().isEmpty()) {
            book.setStatus("在库");
        }
        // 设置创建和更新时间
        Date now = new Date();
        book.setCreatetime(now);
        book.setUpdatetime(now);
        
        return bookDao.addBook(book) > 0;
    }

    @Override
    public boolean deleteBook(Integer id) {
        return bookDao.deleteBookById(id) > 0;
    }

    @Override
    public boolean updateBook(Book book) {
        // 设置更新时间
        book.setUpdatetime(new Date());
        return bookDao.updateBook(book) > 0;
    }

    @Override
    public Book getBookById(Integer id) {
        return bookDao.getBookById(id);
    }

    @Override
    public List<Map<String, Object>> getAllBooks() {
        // 使用分页查询代替全量查询，返回第一页数据
        PageModel pageModel = new PageModel();
        pageModel.setPageNo(1);
        pageModel.setPageSize(1000); // 设置较大的页大小，基本相当于查询所有
        return getBooksByPage(pageModel);
    }
    
    @Override
    public List<Map<String, Object>> getBooksByPage(PageModel pageModel) {
        // 首先获取符合条件的总记录数
        int recordCount = bookDao.getBooksCount(pageModel);
        pageModel.setRecordCount(recordCount);
        
        // 然后进行分页查询
        return bookDao.getBooksByPage(pageModel);
    }

    /**
     * 以下方法保留但通过分页查询实现，以确保兼容性
     */
    
    @Override
    public List<Map<String, Object>> getBooksByIsbn(String isbn) {
        PageModel pageModel = new PageModel();
        pageModel.setPageNo(1);
        pageModel.setPageSize(1000);
        pageModel.setLikeValue(isbn);
        return getBooksByPage(pageModel);
    }

    @Override
    public List<Map<String, Object>> getBooksByTitle(String title) {
        PageModel pageModel = new PageModel();
        pageModel.setPageNo(1);
        pageModel.setPageSize(1000);
        pageModel.setLikeValue(title);
        return getBooksByPage(pageModel);
    }

    @Override
    public List<Map<String, Object>> getBooksByAuthor(String author) {
        PageModel pageModel = new PageModel();
        pageModel.setPageNo(1);
        pageModel.setPageSize(1000);
        pageModel.setLikeValue(author);
        return getBooksByPage(pageModel);
    }

    @Override
    public List<Map<String, Object>> getBooksByCategory(String category) {
        PageModel pageModel = new PageModel();
        pageModel.setPageNo(1);
        pageModel.setPageSize(1000);
        pageModel.setLikeValue(category);
        return getBooksByPage(pageModel);
    }

    @Override
    public List<Map<String, Object>> getBooksByStatus(String status) {
        PageModel pageModel = new PageModel();
        pageModel.setPageNo(1);
        pageModel.setPageSize(1000);
        pageModel.setLikeValue(status);
        return getBooksByPage(pageModel);
    }

    @Override
    public boolean updateBookStatus(Integer id, String status) {
        return bookDao.updateBookStatus(id, status) > 0;
    }
}
